package com.opennetexam.manager.utils;

import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;

import java.util.Collections;
import java.util.List;


public class PageUtils {
    private PageUtils() {
    }

    /**
     * 将无分页查询结果封装成PageImpl对象
     *
     * @param results
     *            LIST结果集（所有数据）
     * @param currentPage
     *            当前页码
     * @param pageSize
     *            每页查询条数
     * @param total
     *            查询记录总条数
     * @param <T>
     * @return
     */
    public static <T> PageImpl<T> getPageInfos(List<T> results, int currentPage, int pageSize, long total) {
        return new PageImpl<>(getPagedList(results, currentPage, pageSize), new PageRequest(currentPage - 1, pageSize),
                total);
    }

    /**
     * 将分页结果集封装成PageImpl对象
     *
     * @param results
     *            LIST结果集 （已分页数据）
     * @param currentPage
     *            当前页码
     * @param pageSize
     *            每页查询条数
     * @param total
     *            查询记录总条数
     * @param <T>
     * @return
     */
    public static <T> PageImpl<T> getPageByPagedList(List<T> results, int currentPage, int pageSize, long total) {
        return new PageImpl<>(results, new PageRequest(currentPage - 1, pageSize),
                total);
    }

    /**
     * 得到分页后的数据
     *
     * @param
     * @return 分页后结果
     */
    public static <T> List<T> getPagedList(List<T> dataList, int page, int pageSize) {
        int fromIndex = (page - 1) * pageSize;
        if (fromIndex >= dataList.size()) {
            return Collections.emptyList();
        }

        int toIndex = page * pageSize;
        if (toIndex >= dataList.size()) {
            toIndex = dataList.size();
        }
        return dataList.subList(fromIndex, toIndex);
    }
}
